const config=require('../config')
const sha1=require('sha1')
const {getUserDataAsysnc,parseXMLAsync,formatMessage}=require('../utils/tool')
module.exports=()=>{
  return async (req,res,next)=>{
    console.log(req.query)
    const {signature,timestamp,nonce,echostr}=req.query;
    const {token}=config;

    const sha1Str=sha1([timestamp,nonce,token].sort().join(''));
    /*
    * get:验证服务器有效性
    * post:微信服务器将用户发送的数据以post请求方式转发到开发者服务器
    * {
  signature: '9953a1d996499f448e2a396a595065376a56f82e',
  timestamp: '1625128555',
  nonce: '46478045',
  openid: 'os_9N5zv3f02RIV3bdnnOyJkZ5IM'
}
    * */
    if(req.method==='GET'){
      if(sha1Str==signature){//返回echostr给微信服务器
        res.send(echostr)
      }else{
        res.end('error')
      }
    }else if(req.method==='POST'){
      if(sha1Str!=signature){//返回echostr给微信服务器
        res.end('error')
      }
      // console.log(req.query)
      //接收请求体中数据
      const xmlData=await getUserDataAsysnc(req)
      //将xml数据解析为js对象
      const jsData=await parseXMLAsync(xmlData)
      console.log(jsData)
      //格式化数据
      const message=formatMessage(jsData);
      console.log(message)
      let content='不能识别该消息'
      if(message.MsgType==='text'){
        if(message.Content==='1'){
          content='好的，收到1'
        }else if(message.Content==='2'){
          content='好的，收到2'
        }else if(message.Content.match('爱')){
          content='我喜欢你'
        }
      }
      let replyMessage = `<xml>
  <ToUserName><![CDATA[${message.FromUserName}]]></ToUserName>
  <FromUserName><![CDATA[${message.ToUserName}]]></FromUserName>
  <CreateTime>${Date.now()}</CreateTime>
  <MsgType><![CDATA[text]]></MsgType>
  <Content><![CDATA[${content}]]></Content></xml>`;
      console.log(replyMessage)
      //返回响应给微信服务器
      //若开发者服务器没有返回响应给微信服务器，微信服务器会发送三次请求
      res.send(replyMessage)
    }else{
      res.end('error')
    }
  }
}
